死锁
死锁问题
系统模型
死锁特征
死锁处理方法
	1.死锁预防
  2.死锁避免
  3.死锁检测
  4.死锁恢复
一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源。
例子：
① 系统有2个磁带驱动器
② P1和P2各有一个，都需要另外一个。

资源类型R1,R2.....Rm

可重复使用的资源
① 在一个时间只能一个进程使用且不能被删除
② 进程获得资源，后来释放由其他进程重用
③ 处理器，IO通道，主和副存储器，设备和数据结构，如文件，数据库和信号量
④ 如果每个进程拥有一个资源并请求其他资源，死锁可能发生
使用资源
① 创建和销毁
② 在IO缓冲区的中断，信息，消息，信息
③ 如果接收消息阻塞可能会发生死锁
④ 可能少见的组合事件会引起死锁
资源分配图：一组顶点V和边E的集合
① V有两种类型：
P={P1,P2, ... Pn},集合包括系统中的所有进程。
R=
基本情况
如果图中不包含循环=>没有死锁
如果图包括循环=>
如果每个资源类只有一个实例，那么死锁。
如果每个资源类有几个实例，可能死锁。.

死锁可能出现如果四个条件同时成立
互斥：在一个时间只能有一个进程使用资源。
持有并等待：进程保持至少一个资源正在等待获取其他进程持有的额外资源。
无抢占：一个资源只能被进程自愿释放，进程已经完成了它的任务之后。
循环等待：存在等待进程集合{P0,P1,...,Pn}，P0正在等待P1所占用的资源，P1正在等待P2占用的资源，....，Pn-1在等待Pn所占用资源，Pn正在等待P0所占用的资源。

确保系统永远不会进入死锁状态
运行系统进入死锁状态，然后恢复
忽略这个问题，假装系统中从来没有发生死锁；用于大多数操作系统，包括Unix。

限制申请方式
① 互斥——共享资源不是必须的，必须占用非共享资源。
② 占用并等待——必须保证当一个进程请求的资源，它不持有任何其他资源。
  需要进程请求并分配其所有资源，它开始执行之前或者允许进程请求资源仅当进程没有资源。
  资源利用率低：可能发生饥饿。
③ 无抢点——如果进程占有某些资源，并请求其它不能被立即分配的资源，则释放当前正占有的资源
被抢占资源添加到资源列表中
只有当它能够获得旧的资源以及它请求新的资源，进程可以得到执行
④ 循环等待——对所有资源类型进行排序，并要求每个进程按照资源的顺序进行申请。


